Three-dimensional graphics processing is utilized in a number of applications, from electronic games, and movies to computer aided design (CAD). Conventionally, three-dimensional graphics processing includes a multi-step rendering process of transitioning from a database representation of three-dimensional objects to a two-dimensional projection of the object into a display space. The process generally includes setting up a polygon model (e.g., a plurality of primitives) of objects, applying linear transformation to each primitive, culling back facing primitives, clipping the primitives against a view volume, rasterizing the primitives to a pixel coordinate set, shading/lighting the individual pixels using interpolated or incremental shading techniques, and the like. Typically, graphics processors are organized in a pipeline architecture, where each stage is dedicated to performing specific functions. A benefit of the pipeline architecture is that it permits fast, high quality rendering of even complex scenes.
A random number generator may be utilized for graphics and image processing applications. For example, the random number generator may be utilized to generate noise samples for use in texturing processes. The random number generator may be implemented by a thermal noise generator (e.g., thermal resistor) or a software implemented sequential random number generator. A thermal resistor provides a hardware implementable random number generator having a high degree of entropy. However, the thermal resistor does not provide a repeatable random number sequence, which is important for both hardware/software debugging and maintaining rendering consistency in animations.
Software implemented sequential random number generators (e.g., XN=aXN−1+b) are implemented by the central processor unit (e.g., CPU) and provide a random number after a relatively long sequence. The sequential number generation processes is repeatable, but is not readily implementable in hardware. It is appreciated that the input may be determined from the output (e.g., solve for XN−1 given XN). It is also appreciated that random number generators implemented in software are sequential and present a performance bottleneck for parallel computations in pipeline architectures. In addition, typical sequential random number generators (e.g., linear congruential regression equation) are pseudo-random and can significantly bias the resultant statistics.